/**
 * 定义 RowType 接口，用于描述 系统参数配置类型 数据库行的结构。
 */
export interface ParamsTypeType {
  id: string;
  belongKeyTitle: string;
  belongKey: string;
  status: number;
  createBy: string;
  createTime: string;
  updateBy: string;
  updateTime: string;
}

/**
 * 定义 RowType 接口，用于描述 系统参数配置 数据库行的结构。
 */
export interface ParamsType {
  id: string;
  configName: string;
  configField: string;
  configComponentType: string;
  configComponentData: string;
  configRulesRequired: number;
  configRules: string;
  configHelp: string;
  configFormItemClass: string;
  inputVal: string;
  isDisabled: number;
  isDynamicDisplay: number;
  dynamicDisplayFields: string;
  dynamicDisplayVals: string;
  sortRank: number;
  createBy: string;
  createTime: string;
  updateBy: string;
  updateTime: string;
}

// 组件类型
export const ConfigComponentTypeList = [
  {
    label: 'Input（输入框）',
    value: 'Input',
  },
  {
    label: 'InputNumber（数字输入框）',
    value: 'InputNumber',
  },
  {
    label: 'InputPassword（密码框）',
    value: 'InputPassword',
  },
  {
    label: 'Textarea（文本域）',
    value: 'Textarea',
  },
  {
    label: 'Select（下拉框-自定义数据）',
    value: 'Select',
  },
  {
    label: 'RadioGroup（单选框-自定义数据）',
    value: 'RadioGroup',
  },
  {
    label: '图片上传',
    value: 'SparkUpload',
  },
];

export const ConfigFormItemClassList = [
  {
    label: '1',
    value: 'col-span-1',
  },
  {
    label: '2',
    value: 'col-span-2',
  },
  {
    label: '3',
    value: 'col-span-3',
  },
  {
    label: '4',
    value: 'col-span-4',
  },
];

/**
 * 处理参数为表单形式
 * @param params 参数
 */
export async function handleSchema(params) {
  return params.map((item) => {
    const schema = {
      component: item.configComponentType,
      fieldName: item.configField,
      label: item.configName,
    };
    const componentProps = {
      placeholder: `请输入${item.configName}`,
    };
    // 如果组件类型是 'Select | RadioGroup'，则添加 options 属性
    if (
      item.configComponentType === 'Select' ||
      item.configComponentType === 'RadioGroup' ||
      item.configComponentType === 'CheckboxGroup'
    ) {
      let options = [];
      if (typeof item.configComponentData === 'string') {
        try {
          // 如果是字符串，则尝试解析为 JSON
          options = JSON.parse(item.configComponentData);
        } catch {
          // 可以选择设置默认值或空数组
          options = [];
        }
      } else if (Array.isArray(item.configComponentData)) {
        // 如果已经是数组，则直接使用
        options = item.configComponentData;
      }
      componentProps.options = options;
      if (item.configComponentType === 'Select') {
        // 可清除
        componentProps.allowClear = true;
      }
    }
    // 单选框独有
    if (item.configComponentType === 'RadioGroup') {
      componentProps.buttonStyle = 'solid';
      componentProps.optionType = 'button';
    }
    // 是否动态显示
    if (
      item?.isDynamicDisplay === 0 &&
      item?.dynamicDisplayFields &&
      item?.dynamicDisplayVals
    ) {
      schema.dependencies = {
        show(values) {
          return (
            values[item?.dynamicDisplayFields] === item?.dynamicDisplayVals
          );
        },
        triggerFields: [item?.dynamicDisplayFields],
      };
    }
    return {
      ...schema,
      componentProps,
      disabled:
        item.isDisabled === 0 && item.inputVal !== null && item.inputVal !== '',
      help: item.configHelp || null,
      rules:
        item.configRulesRequired === 0
          ? item.configRules || 'required'
          : undefined,
      formItemClass: item.configFormItemClass || null,
    };
  });
}

/**
 * 获取表单值
 * @param params 配置参数
 */
export async function handleFormVals(params) {
  const result = {};
  params.forEach((item) => {
    result[item.configField] = item.inputVal;
  });
  return result;
}
